﻿// Locator2Impl.java - extended LocatorImpl
// http://www.saxproject.org
// Public Domain: no warranty.
// $Id$
using System;
using org.xml.sax.helpers;

namespace org.xml.sax.ext
{

    /**
     * SAX2 extension helper for holding additional Entity information,
     * implementing the {@link Locator2} interface.
     *
     * <blockquote>
     * <em>This module, both source code and documentation, is in the
     * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
     * </blockquote>
     *
     * <p> This is not part of core-only SAX2 distributions.</p>
     *
     * @since SAX 2.0.2
     * @author David Brownell
     * @version TBS
     */
    public class Locator2Impl : LocatorImpl, Locator2
    {
        private String encoding;
        private String version;


        /**
         * Construct a new, empty Locator2Impl object.
         * This will not normally be useful, since the main purpose
         * of this class is to make a snapshot of an existing Locator.
         */
        public Locator2Impl() { }

        /**
         * Copy an existing Locator or Locator2 object.
         * If the object implements Locator2, values of the
         * <em>encoding</em> and <em>version</em>strings are copied,
         * otherwise they set to <em>null</em>. 
         *
         * @param locator The existing Locator object.
         */
        public Locator2Impl(Locator locator)
            : base(locator)
        {
            if (locator is Locator2)
            {
                Locator2 l2 = (Locator2)locator;

                version = l2.getXMLVersion();
                encoding = l2.getEncoding();
            }
        }

        ////////////////////////////////////////////////////////////////////
        // Locator2 method implementations
        ////////////////////////////////////////////////////////////////////

        /**
         * Returns the current value of the version property.
         *
         * @see #setXMLVersion
         */
        public String getXMLVersion()
        { return version; }

        /**
         * Returns the current value of the encoding property.
         *
         * @see #setEncoding
         */
        public String getEncoding()
        { return encoding; }


        ////////////////////////////////////////////////////////////////////
        // Setters 
        ////////////////////////////////////////////////////////////////////

        /**
         * Assigns the current value of the version property.
         *
         * @param version the new "version" value
         * @see #getXMLVersion
         */
        public void setXMLVersion(String version)
        { this.version = version; }

        /**
         * Assigns the current value of the encoding property.
         *
         * @param encoding the new "encoding" value
         * @see #getEncoding
         */
        public void setEncoding(String encoding)
        { this.encoding = encoding; }
    }
}